AWK এ লুপিং স্ট্রাকচার ব্যবহার করে ব্যবহারকারীরা ডেটা সেটের উপর পুনরাবৃত্তি করতে পারেন, যা ডেটা বিশ্লেষণ এবং প্রক্রিয়াকরণের জন্য অত্যন্ত কার্যকর। AWK এ প্রধান লুপিং স্ট্রাকচারগুলি হল for
, while
, এবং do while
।
for
লুপfor
লুপ একটি নির্দিষ্ট সংখ্যা বা একটি সারণীর সমস্ত আইটেমের উপর পুনরাবৃত্তি করতে ব্যবহৃত হয়। এটি তিনটি অংশ নিয়ে গঠিত: সূচনা, শর্ত, এবং আপডেট।
for (initialization; condition; update) {
action;
}
awk 'BEGIN {
for (i = 1; i <= 5; i++) {
print "Number: " i;
}
}'
এটি 1 থেকে 5 পর্যন্ত সংখ্যা প্রিন্ট করবে।
while
লুপwhile
লুপ একটি শর্ত সত্য থাকা পর্যন্ত পুনরাবৃত্তি করে। এটি সাধারণত তখন ব্যবহৃত হয় যখন লুপের সংখ্যা আগে থেকে জানা থাকে না।
while (condition) {
action;
}
awk 'BEGIN {
i = 1;
while (i <= 5) {
print "Number: " i;
i++;
}
}'
এটি 1 থেকে 5 পর্যন্ত সংখ্যা প্রিন্ট করবে।
do while
লুপdo while
লুপ অন্তত একবার কার্যকর হয় এবং তারপরে শর্ত পরীক্ষা করে। যদি শর্ত সত্য হয়, তবে এটি পুনরাবৃত্তি করতে থাকে।
do {
action;
} while (condition);
awk 'BEGIN {
i = 1;
do {
print "Number: " i;
i++;
} while (i <= 5);
}'
এটি 1 থেকে 5 পর্যন্ত সংখ্যা প্রিন্ট করবে।
লুপিং স্ট্রাকচারগুলি ডেটা প্রক্রিয়াকরণের সময় কার্যকরী হতে পারে। উদাহরণস্বরূপ, একটি ফাইলের মধ্যে প্রতিটি লাইন পড়ার জন্য একটি while
লুপ ব্যবহার করা যেতে পারে।
awk '{
sum += $1
} END {
print "Total sum: " sum
}' filename.txt
এখানে, AWK ফাইলের প্রতিটি লাইনের প্রথম কলামের মান যোগ করে এবং শেষে মোট যোগফল প্রিন্ট করে।
AWK এ লুপিং স্ট্রাকচারগুলি একটি শক্তিশালী উপায় যা ব্যবহারকারীদের ডেটা সেটের উপর পুনরাবৃত্তি করতে এবং কার্যক্রম সম্পন্ন করতে সাহায্য করে। for
, while
, এবং do while
লুপগুলি ব্যবহার করে, ব্যবহারকারীরা তাদের স্ক্রিপ্টে জটিল লজিক এবং কার্যকরীতা যুক্ত করতে পারেন। AWK এর লুপিং স্ট্রাকচারগুলি ডেটা বিশ্লেষণ এবং প্রসেসিংয়ে দক্ষতা বাড়াতে সহায়ক।
for
লুপ হল প্রোগ্রামিংয়ের একটি কাঠামো যা একটি নির্দিষ্ট সংখ্যা পর্যন্ত কোডের একটি ব্লককে পুনরাবৃত্তি করতে ব্যবহৃত হয়। এটি সাধারণত একটি নির্দিষ্ট সেকেনস বা কালেকশনের প্রতিটি উপাদানের জন্য কাজ করতে ব্যবহৃত হয়। for
লুপের সাহায্যে আপনি সহজেই একটি তালিকা, অ্যারে, অথবা কোন iterable অবজেক্টের উপর কাজ করতে পারেন।
সাধারণভাবে, for
লুপের সিনট্যাক্স নিম্নরূপ:
for variable in iterable:
# কোড ব্লক
এখানে:
variable
হল একটি পরিবর্তনশীল যা প্রতিটি পুনরাবৃত্তিতে iterable-এর একটি উপাদান ধারণ করে।iterable
হল একটি কালেকশন, যেমন একটি তালিকা, টুপল, বা স্ট্রিং।fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
এই উদাহরণে, fruits
তালিকার প্রতিটি উপাদান (fruit
) পুনরাবৃত্তি করে এবং তা প্রিন্ট করবে। আউটপুট হবে:
apple
banana
cherry
for i in range(5):
print(i)
এখানে range(5)
0 থেকে 4 পর্যন্ত সংখ্যাগুলি উৎপন্ন করবে, এবং লুপের মধ্যে i
প্রতি পুনরাবৃত্তিতে একটি সংখ্যা ধারণ করবে। আউটপুট হবে:
0
1
2
3
4
word = "Hello"
for letter in word:
print(letter)
এই উদাহরণে, স্ট্রিংয়ের প্রতিটি অক্ষর letter
হিসেবে পুনরাবৃত্তি হবে এবং তা প্রিন্ট করবে। আউটপুট হবে:
H
e
l
l
o
colors = ["red", "green", "blue"]
fruits = ["apple", "banana", "cherry"]
for color in colors:
for fruit in fruits:
print(color, fruit)
এই উদাহরণে, colors
এবং fruits
উভয় তালিকার জন্য একটি নেস্টেড লুপ ব্যবহৃত হয়েছে। আউটপুট হবে:
red apple
red banana
red cherry
green apple
green banana
green cherry
blue apple
blue banana
blue cherry
for
লুপ একটি অত্যন্ত শক্তিশালী এবং কার্যকরী প্রোগ্রামিং কাঠামো, যা আপনাকে নির্দিষ্ট সংখ্যক বার কোডের একটি ব্লক পুনরাবৃত্তি করতে এবং বিভিন্ন ডেটা স্ট্রাকচারের উপর কাজ করতে সহায়তা করে। এটি সহজ এবং পরিষ্কার কোড লেখার জন্য সহায়ক, যা ডেটা বিশ্লেষণ এবং ম্যানিপুলেশনকে অনেক সহজ করে তোলে।
while এবং do-while লুপ দুটি গুরুত্বপূর্ণ লুপিং কনস্ট্রাক্ট যা প্রোগ্রামিং ভাষায় ব্যবহার করা হয়। AWK তে এই লুপগুলি একটি শর্তের ভিত্তিতে কোডের একটি ব্লক পুনরাবৃত্তি করতে ব্যবহৃত হয়। তাদের মধ্যে প্রধান পার্থক্য হল, while
লুপের মধ্যে শর্তটি লুপের শুরুতে পরীক্ষা করা হয়, যখন do-while
লুপের মধ্যে শর্তটি লুপের শেষে পরীক্ষা করা হয়।
while লুপটি একটি নির্দিষ্ট শর্ত সত্য হওয়া পর্যন্ত কোডের একটি ব্লক চালিয়ে যায়। যখন শর্তটি মিথ্যা হয়ে যায়, লুপটি বন্ধ হয়ে যায়।
while (condition) {
# কোডের ব্লক
}
awk '{
count = 1
while (count <= 5) {
print $1, count
count++
}
}' data.txt
এখানে, count
এর মান 1 থেকে 5 পর্যন্ত বাড়ানো হয় এবং $1
কলামের মানের সাথে প্রতিটি সংখ্যা প্রিন্ট হয়।
do-while লুপটি অন্তত একবার কোডের ব্লকটি চালাতে নিশ্চিত করে, কারণ শর্তটি কোড ব্লকের শেষে পরীক্ষা করা হয়। যদি শর্তটি সত্য হয়, তবে এটি আবার চালানো হয়।
do {
# কোডের ব্লক
} while (condition);
awk '{
count = 1
do {
print $1, count
count++
} while (count <= 5)
}' data.txt
এখানে, লুপটি অন্তত একবার চলবে এবং count
5 এর চেয়ে ছোট বা সমান থাকলে পুনরায় চলবে।
while
লুপের মধ্যে শর্তটি প্রথমে পরীক্ষা করা হয়, এবং যদি শর্তটি মিথ্যা হয়, তবে লুপ কখনও কার্যকর হয় না। অন্যদিকে, do-while
লুপে অন্তত একবার কোডের ব্লক কার্যকর হয়, কারণ শর্তটি পরে পরীক্ষা করা হয়।while
লুপের জন্য লুপের শরীরের অন্তর্ভুক্তির সময় শর্তটি মিথ্যা হলে লুপটি সম্পূর্ণরূপে বাদ দেওয়া হতে পারে, যেখানে do-while
লুপের অন্তত একটি পুনরাবৃত্তি নিশ্চিত।while
এবং do-while
লুপগুলি AWK এবং অন্যান্য প্রোগ্রামিং ভাষায় কোডের একটি ব্লক পুনরাবৃত্তি করার জন্য ব্যবহৃত হয়। while
লুপ শর্ত সত্য হওয়া পর্যন্ত কাজ করে, যেখানে do-while
লুপ অন্তত একবার কাজ করে এবং তারপর শর্ত পরীক্ষা করে। এই লুপগুলি ব্যবহার করে ব্যবহারকারীরা বিভিন্ন শর্ত এবং ডেটা প্রক্রিয়াকরণের কাজ করতে সক্ষম হন, যা তাদের প্রোগ্রামের কার্যকারিতা বৃদ্ধি করে।
AWK প্রোগ্রামিং ভাষায় break
এবং continue
এর মতো কন্ট্রোল স্টেটমেন্টগুলি লুপের কার্যকারিতা নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এগুলি একটি লুপের মধ্যে অবস্থার ভিত্তিতে কার্যক্রম নিয়ন্ত্রণ করতে সহায়তা করে। নিচে এই দুটি কন্ট্রোল স্টেটমেন্টের ব্যবহার সম্পর্কে বিস্তারিত আলোচনা করা হলো।
break
স্টেটমেন্ট ব্যবহার করে একটি লুপকে তৎক্ষণাৎ শেষ করা যায়। যখন break
ব্যবহার করা হয়, তখন লুপের Execution থামিয়ে দেওয়া হয় এবং নিয়ন্ত্রণ পরবর্তী Statement এ চলে যায়।
awk '{
for (i = 1; i <= 10; i++) {
if (i == 5) {
break; # যখন i 5 হয়, লুপ থেকে বেরিয়ে যাবে
}
print i; # 1 থেকে 4 প্রিন্ট হবে
}
}' filename.txt
এখানে, i
যখন 5 হয় তখন break
স্টেটমেন্ট কার্যকর হবে এবং লুপটি থামবে।
continue
স্টেটমেন্ট ব্যবহার করে বর্তমান লুপের Iteration বাদ দেওয়া যায় এবং পরবর্তী Iteration এ চলে যায়। যখন continue
ব্যবহৃত হয়, তখন লুপের বর্তমান Iteration সম্পন্ন হয় এবং পরবর্তী Iteration শুরু হয়।
awk '{
for (i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; # যখন i জোড় সংখ্যা হয়, তখন সেই Iteration বাদ দেওয়া হবে
}
print i; # শুধুমাত্র বিজোড় সংখ্যা (1, 3, 5, 7, 9) প্রিন্ট হবে
}
}' filename.txt
এখানে, i
যদি জোড় সংখ্যা হয় তাহলে continue
কার্যকর হবে এবং সেই Iteration বাদ দেওয়া হবে, ফলে কেবল বিজোড় সংখ্যাগুলি প্রিন্ট হবে।
AWK এ break
এবং continue
ব্যবহার করে লুপের কার্যক্রম নিয়ন্ত্রণ করা সহজ এবং কার্যকর। এই কন্ট্রোল স্টেটমেন্টগুলি বিশেষভাবে ডেটা প্রক্রিয়াকরণ এবং বিশ্লেষণের সময় উপকারী হতে পারে, যেখানে কিছু নির্দিষ্ট শর্তের উপর ভিত্তি করে কার্যক্রম সম্পাদন করতে হয়।
নেস্টেড লুপস হল লুপের মধ্যে একটি লুপ। AWK তে নেস্টেড লুপ ব্যবহার করে একাধিক স্তরের ডেটা প্রক্রিয়াকরণের কাজ করা যায়। এটি ডেটা টেবিল, ম্যাট্রিক্স, অথবা যখন একাধিক ডেটা সেটের সাথে কাজ করা হয় তখন উপকারী।
AWK তে নেস্টেড লুপের সাধারণ গঠন হল:
awk '{
for (i = 1; i <= N; i++) {
for (j = 1; j <= M; j++) {
# কিছু কাজ
}
}
}' filename
এখানে, N
এবং M
হল লুপের সীমা। প্রথম লুপটি i
পরিবর্তনশীলের মাধ্যমে চলবে এবং তার মধ্যে দ্বিতীয় লুপটি j
পরিবর্তনশীলের মাধ্যমে চলবে।
ধরা যাক, আমাদের কাছে একটি টেক্সট ফাইল matrix.txt
রয়েছে যার মধ্যে কিছু সংখ্যা আছে:
1 2 3
4 5 6
7 8 9
আমরা চাই প্রতিটি সংখ্যার ওপর গুনফল করতে এবং ফলাফল প্রিন্ট করতে।
awk '{
for (i = 1; i <= NF; i++) {
for (j = 1; j <= NF; j++) {
product = $i * $j
print "Product of " $i " and " $j " is: " product
}
}
}' matrix.txt
ফলাফল:
Product of 1 and 1 is: 1
Product of 1 and 2 is: 2
Product of 1 and 3 is: 3
Product of 2 and 1 is: 2
Product of 2 and 2 is: 4
Product of 2 and 3 is: 6
...
এখানে, প্রথম লুপ i
ব্যবহার করে প্রতি ফিল্ডের মানের জন্য এবং দ্বিতীয় লুপ j
ব্যবহার করে অন্য ফিল্ডের সাথে গুণফল করা হয়েছে।
একটি 2D ম্যাট্রিক্সের ট্রান্সপোজ তৈরি করতে নেস্টেড লুপ ব্যবহার করা যেতে পারে। ধরুন আমাদের কাছে নিম্নলিখিত matrix.txt
ফাইল রয়েছে:
1 2 3
4 5 6
7 8 9
আমরা এটিকে ট্রান্সপোজ করতে চাই:
awk '{
for (i = 1; i <= NF; i++) {
matrix[NR, i] = $i
}
rows = NR
}
END {
for (i = 1; i <= NF; i++) {
for (j = 1; j <= rows; j++) {
printf "%d ", matrix[j, i]
}
print ""
}
}' matrix.txt
ফলাফল:
1 4 7
2 5 8
3 6 9
এখানে, প্রথম লুপটি প্রতিটি সংখ্যা ম্যাট্রিক্সে সংরক্ষণ করে এবং দ্বিতীয় লুপটি ট্রান্সপোজ আউটপুট তৈরি করে।
ধরা যাক, আমরা 1 থেকে 3 পর্যন্ত সংখ্যার জন্য 1 থেকে 3 পর্যন্ত সংখ্যা জেনারেট করতে চাই:
awk '{
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
print "i: " i ", j: " j
}
}
}' filename
ফলাফল:
i: 1, j: 1
i: 1, j: 2
i: 1, j: 3
i: 2, j: 1
i: 2, j: 2
i: 2, j: 3
i: 3, j: 1
i: 3, j: 2
i: 3, j: 3
এখানে, প্রথম লুপ i
এর জন্য এবং দ্বিতীয় লুপ j
এর জন্য কাজ করছে, এবং তাদের সাথে সমস্ত সম্ভাব্য সংমিশ্রণ প্রিন্ট করছে।
AWK তে নেস্টেড লুপস ব্যবহার করে ডেটা টেবিল, ম্যাট্রিক্স, অথবা একাধিক ডেটা সেটের সাথে কাজ করা যায়। এটি জটিল ডেটা প্রক্রিয়াকরণের জন্য অত্যন্ত কার্যকর। AWK এর শক্তিশালী লজিক্যাল অপারেটর এবং লুপিং কাঠামোর মাধ্যমে ডেটা বিশ্লেষণের কাজকে আরও সহজ এবং দ্রুত করা সম্ভব।
common.read_more